﻿using Seg.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Seg.Datos
{
    public class ModuloDatos
    {
        BD_SEGEntities context = new BD_SEGEntities();

        public int Insertar(Modulo entidad)
        {
            entidad.CodigoModulo = GenerarCodigo();
            context.Modulo.Add(entidad);
            context.SaveChanges();
            return 1;
        }

        public int Actualizar(Modulo entidad)
        {
            var objUpd = context.Modulo.Where(x => x.CodigoModulo == entidad.CodigoModulo).FirstOrDefault();

            objUpd.Nombre = entidad.Nombre;
            objUpd.Descripcion = entidad.Descripcion;
            objUpd.CodigoSistema = entidad.CodigoSistema;
            objUpd.Anulado = entidad.Anulado;

            context.SaveChanges();
            return 1;
        }

        public int Eliminar(int id)
        {
            var objUpd = context.Modulo.Where(x => x.CodigoModulo == id).FirstOrDefault();
            objUpd.Anulado = true;
            var r = context.SaveChanges();
            return r;
        }

        public List<Modulo> Listar(decimal CodigoSistema,string nombre,string anulado)
        {
            var datos = new List<Seg.Entidades.Modulo>();

            if (anulado == "0")
            {
                datos = context.Modulo.Where(x =>
                    ((x.Nombre.Contains(nombre) || nombre == "")
                    && (x.CodigoSistema == CodigoSistema || CodigoSistema == 0)
                    && (x.Sistema.Anulado == false))
                ).ToList();
            }
            else
            {
                var anul = anulado == "A" ? false : true;
                datos = context.Modulo.Where(x =>
                    ((x.Nombre.Contains(nombre) || nombre == "")
                    && (x.CodigoSistema == CodigoSistema || CodigoSistema == 0)
                    && (x.Anulado == anul)
                    && (x.Sistema.Anulado == false))
                ).ToList();
            }
            return datos;
        }
        public Modulo ObtenerModulo(decimal CodigoModulo)
        {
            var datos = new Seg.Entidades.Modulo();

            datos = context.Modulo.Where(x =>
                (x.CodigoModulo == CodigoModulo)
            ).Single();

            return datos;
        }
        int GenerarCodigo()
        {
            var actual = context.Modulo.Max(x => x.CodigoModulo);
            return actual + 1;
        }

        public List<Modulo> ListarXSistema(decimal CodigoSistema, decimal CodigoModulo)
        {
            var datos = new List<Seg.Entidades.Modulo>();
             
                datos = context.Modulo.Where(x =>
                    ((x.CodigoSistema == CodigoSistema)
                    && (x.CodigoModulo == CodigoModulo || CodigoModulo == 0)
                    && (x.Sistema.Anulado == false))
                    ).ToList();
           
            return datos;
        }
        public List<Modulo> ListaModuloXSistema(int CodigoSistema)
        {
            var datos = new List<Seg.Entidades.Modulo>();

            datos = context.Modulo.Where(x => (x.CodigoSistema == CodigoSistema) && (x.Anulado == false)).ToList();
            return datos;
        }
    }
}
